package com.ocom.ugcapi.mq.config;

import com.ocom.amqp.core.CurrentLimitingQueue;
import com.ocom.amqp.core.DelayQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description: TODO
 * @Author: 朱晖
 * @Date: 2022/7/3
 **/
@Configuration
public class ActiveQuiryQueueConfig {

	/**
	 * 参数名	释义	是否必填
	 * businessName	业务名称，RabbitMQ Virtual Host 中需保证唯一	是
	 * expiration	延时时间	否 如果不填，则需要开发者发送消息时，手动设置 MessageProperties 消息延时时间
	 * routingKey	路由键 禁止使用 '#'，'*' 模糊匹配字符	是
	 * 声明延时组件
	 * @return
	 */
	@Bean
	public DelayQueue delayQueue() {
		//10秒
//		DelayQueue queue = new DelayQueue("active-check-message", 10000l, "send");  1800000l
		DelayQueue queue = new DelayQueue("active-check-message", 20000l, "send");
		return queue;
	}

	@Bean(name = "serviceChargesDelayQueue")
	public DelayQueue serviceChargesDelayQueue() {
//		DelayQueue queue = new DelayQueue("service-charges-message", 10 * 1000l, "serviceCharges");
		DelayQueue queue = new DelayQueue("service-charges-message",  60 * 60 * 1000l, "serviceCharges");

		return queue;
	}

	/**
	 * 代扣测试延迟退款
	 * @return
	 */
	@Bean(name = "checkWithholdRefundDelayQueue")
	public DelayQueue checkWithholdRefundDelayQueue() {
		DelayQueue queue = new DelayQueue("check-withhold-refund",  60 * 2 * 1000l, "serviceCharges");
		return queue;
	}

	/**
	 * 参数名	释义	是否必填
	 * businessName	业务名称，RabbitMQ Virtual Host 中需保证唯一	是
	 * routingKey	路由键 禁止使用 '#'，'*' 模糊匹配字符	是
	 * currentLimiting	时间窗口内 消息最大数量	是
	 * timeUnit	时间窗口大小 单位毫秒	是
	 * 声明限流队列组件
	 * @return
	 */
	@Bean
	public CurrentLimitingQueue currentLimitingQueue() {
		CurrentLimitingQueue limitingQueue = new CurrentLimitingQueue("callback", "charge", 500, 1000l);
		return limitingQueue;
	}


	/**
	 * 用于处理签约回调
	 * @return
	 */
	@Bean
	public CurrentLimitingQueue currentLimitingQueue2() {
		CurrentLimitingQueue limitingQueue = new CurrentLimitingQueue("sign", "charge", 300, 1000l);
		return limitingQueue;
	}
}
